package com.estagio.bean;

import java.util.List;

import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import javax.faces.model.DataModel;
import javax.faces.model.ListDataModel;

import org.primefaces.context.RequestContext;

import com.estagio.entity.Cidade;
import com.estagio.entity.Estado;
import com.estagio.entity.Fornecedor;
import com.estagio.session.CidadeSession;
import com.estagio.session.FornecedorSession;

@ManagedBean(name="fornecedorBean")
@SessionScoped
public class FornecedorBean {
	
	//ESTADO
	private Fornecedor fornecedor = new Fornecedor();
	private Fornecedor fornecedorSave = new Fornecedor();
	private Fornecedor fornecedorSelecionado;
	private String mensagem;
	private DataModel dataModelFornecedor;
	
	//CIDADE
	private Cidade cidade = new Cidade();
	private Cidade cidadeSelecionado = new Cidade();
	private Cidade cidadeFornecedor = new Cidade();
	private DataModel dataModelCidade;	
	
	public FornecedorBean() {
		this.fornecedor.setCidade(new Cidade());
		this.cidadeFornecedor = new Cidade();
	}


	//GETTERS AND SETTERS

	public Fornecedor getFornecedorSave() {
		return fornecedorSave;
	}

	public void setFornecedorSave(Fornecedor fornecedorSave) {
		this.fornecedorSave = fornecedorSave;
	}

	public DataModel getDataModelFornecedor() {
		return dataModelFornecedor;
	}

	public void setDataModelFornecedor(DataModel dataModelFornecedor) {
		this.dataModelFornecedor = dataModelFornecedor;
	}

	public DataModel getDataModelCidade() {
		return dataModelCidade;
	}

	public void setDataModelCidade(DataModel dataModelCidade) {
		this.dataModelCidade = dataModelCidade;
	}

	public Cidade getCidadeFornecedor() {
		return cidadeFornecedor;
	}

	public void setCidadeFornecedor(Cidade cidadeFornecedor) {
		this.cidadeFornecedor = cidadeFornecedor;
	}

	public Cidade getCidadeSelecionado() {
		return cidadeSelecionado;
	}

	public void setCidadeSelecionado(Cidade cidadeSelecionado) {
		this.cidadeSelecionado = cidadeSelecionado;
	}

	public Cidade getCidade() {
		return cidade;
	}

	public void setCidade(Cidade cidade) {
		this.cidade = cidade;
	}
	
	public Fornecedor getFornecedor() {
		return fornecedor;
	}

	public void setFornecedor(Fornecedor fornecedor) {
		this.fornecedor = fornecedor;
	}

	public Fornecedor getFornecedorSelecionado() {
		return fornecedorSelecionado;
	}

	public void setFornecedorSelecionado(Fornecedor fornecedorSelecionado) {
		this.fornecedorSelecionado = fornecedorSelecionado;
	}
	
	
	//METODOS ESTADO
	public void saveEditFornecedor() {
		FornecedorSession fornecedorRN = new FornecedorSession();
		Fornecedor fornecedor = this.fornecedorSave;		
		this.mensagem = fornecedorRN.save(fornecedor);

		FacesMessage faces = new FacesMessage(mensagem);
		System.out.println(mensagem);
		FacesContext contexto = FacesContext.getCurrentInstance();
		contexto.addMessage(null, faces);		
	}	

	public void saveFornecedor() {
		FornecedorSession fornecedorRN = new FornecedorSession();
		Fornecedor fornecedor = this.fornecedorSave;		
		this.mensagem = fornecedorRN.save(fornecedor);
		
		FacesMessage faces = new FacesMessage(this.mensagem);
		FacesContext contexto = FacesContext.getCurrentInstance();
		contexto.addMessage(null, faces);		
	}


	public String deleteFornecedor() {
		FornecedorSession fornecedorRN = new FornecedorSession();		
		Fornecedor fornecedor = this.fornecedorSave;
		this.mensagem = fornecedorRN.delete(fornecedor);
		this.fornecedorSave = new Fornecedor();
		FacesMessage faces = new FacesMessage(mensagem);
		FacesContext contexto = FacesContext.getCurrentInstance();
		contexto.addMessage(null, faces);
		return "consultarFornecedor";
	}

	public DataModel findFornecedor() {
		FornecedorSession fornecedorSession = new FornecedorSession();
		this.fornecedor = new Fornecedor();
		List<Fornecedor> lista = fornecedorSession.find(this.fornecedor);
		this.dataModelFornecedor = new ListDataModel(lista);
		return this.dataModelFornecedor;
	}
	
	public void clean() {
		this.fornecedor = new Fornecedor();
	}
	
	//METODOS CIDADE (para dialogs)
	public void saveCidade() {
		CidadeSession cidadeSession = new CidadeSession();
		Cidade cidade = this.cidade;		
		this.mensagem = cidadeSession.save(cidade);
		
		FacesMessage faces = new FacesMessage(this.mensagem);
		FacesContext contexto = FacesContext.getCurrentInstance();
		contexto.addMessage(null, faces);		
	}

	public String deleteCidade() {
		CidadeSession cidadeRN = new CidadeSession();		
		Cidade cidade = this.cidadeSelecionado;
		this.mensagem = cidadeRN.delete(cidade);
		this.cidadeSelecionado = new Cidade();
		FacesMessage faces = new FacesMessage(mensagem);
		FacesContext contexto = FacesContext.getCurrentInstance();
		contexto.addMessage(null, faces);
		return "consultarCidade";
	}

	public DataModel findCidade() {
		RequestContext.getCurrentInstance().update("panelDialogConsultarCidade");		
		
		List<Cidade> listaCidade = new CidadeSession().find(this.cidade);
		this.dataModelCidade = new ListDataModel(listaCidade);
		return this.dataModelCidade;
	}
	
	public void selectCidade() {
		Cidade cidadeAux = (Cidade) this.dataModelCidade.getRowData();
		
		System.out.println("cidade datamodel: " + cidadeAux.getDescricao());
		this.fornecedorSave.setCidade(cidadeAux);

		System.out.println("idcidade fornecedorSave: " + this.fornecedorSave.getCidade().getIdCidade());
		System.out.println("cidade fornecedorSave: " + this.fornecedorSave.getCidade().getDescricao());
		
		RequestContext.getCurrentInstance().update("formManterFornecedor:pgCidadeFornecedor");
		RequestContext.getCurrentInstance().execute("dialogConsultarCidade.hide()");
	}
	
	//INVOCAR TELAS
	public String newFornecedor() {
		this.fornecedorSave.setCidade(new Cidade());
		this.fornecedorSave.getCidade().setEstado(new Estado());
		return "manterFornecedor";
	}
	
	public String consultarFornecedor() {
		return "consultarFornecedor";
	}

	public String editarFornecedor() {
		this.fornecedorSave = (Fornecedor) this.dataModelFornecedor.getRowData();		
		return "editarFornecedor";
	}
	
	public String excluirFornecedor() {
		this.fornecedorSave = (Fornecedor) this.dataModelFornecedor.getRowData();
		return "excluirFornecedor";
	}
	
	public void openDialogConsultarFornecedor() {
		RequestContext.getCurrentInstance().update("idDialogConsultarFornecedor");
		RequestContext.getCurrentInstance().execute("dialogConsultarFornecedor.show()");
	}
	
	public void openDialogManterFornecedor() {
		this.fornecedorSave = new Fornecedor();
		RequestContext.getCurrentInstance().update("idDialogManterFornecedor");
		RequestContext.getCurrentInstance().execute("dialogManterFornecedor.show()");
	}

	public void openDialogConsultarCidade() {
		RequestContext.getCurrentInstance().update("idDialogConsultarCidade");
		RequestContext.getCurrentInstance().execute("dialogConsultarCidade.show()");
	}
	
}
